#include <stdio.h>
#include <string.h>
#include <ctype.h> // isdigit


char * validIPAddress(char * queryIP) {
    int len = strlen(queryIP);
    if (strchr(queryIP, '.')) {
        // IPv4
        int last = -1;
        for (int i = 0; i < 4; ++i) {
            int cur = -1;
            if (i == 3) {
                cur = len;
            } else {
                char * p = strchr(queryIP + last + 1, '.');
                if (p) {
                    cur = p - queryIP;
                }
            }
            if (cur < 0) {
                return "Neither";
            }
            if (cur - last - 1 < 1 || cur - last - 1 > 3) {
                return "Neither";
            }
            int addr = 0;
            for (int j = last + 1; j < cur; ++j) {
                if (!isdigit(queryIP[j])) {
                    return "Neither";
                }
                addr = addr * 10 + (queryIP[j] - '0');
            }
            if (addr > 255) {
                return "Neither";
            }
            if (addr > 0 && queryIP[last + 1] == '0') {
                return "Neither";
            }
            if (addr == 0 && cur - last - 1 > 1) {
                return "Neither";
            }
            last = cur;
        }
        return "IPv4";
    }
    else {
        // IPv6
        int last = -1;
        for (int i = 0; i < 8; ++i) {
            int cur = -1;
            if (i == 7) {
                cur = len;
            } else {
                char * p = strchr(queryIP + last + 1, ':');
                if (p) {
                    cur = p - queryIP;
                }
            }
            if (cur < 0) {
                return "Neither";
            }
            if (cur - last - 1 < 1 || cur - last - 1 > 4) {
                return "Neither";
            }
            for (int j = last + 1; j < cur; ++j) {
                if (!isdigit(queryIP[j]) && !('a' <= tolower(queryIP[j]) && tolower(queryIP[j]) <= 'f')) {
                    return "Neither";
                }
            }
            last = cur;
        }
        return "IPv6";
    }
}


int main() {
    char * queryIP = "172.16.254.1";
    char * result = validIPAddress(queryIP);
    printf("%s", result);
}